﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using Insifo.WE;
using Microsoft.Reporting.WebForms;
using System.Collections.Specialized;

public partial class genGrupoReporteListar : ObjectPage
{

    #region CONSTANTES

    protected const string REPORTE_RUTA = "/Galexito_MAIN/genGrupoReporteListar";
    protected const string EDITAR_RUTA = "~/gen/genGrupoReporteEditar.aspx";

    #endregion

    #region PROPIEDADES

    protected int NumeroPagina = 0;

    #endregion PROPIEDADES

    #region EVENTOS

    protected void Page_Load(object sender, EventArgs e)
    {
        //Eventos del Master
        Master.MenuAccionEvento += new MasterPageMenuListarClickHandler(Master_MenuButton);
        if (!IsPostBack)
        {
            Cargar();
            Listar();
        }
    }

    protected void Master_MenuButton(object sender, EventArgs e)
    {
        string strAccion = ((CommandEventArgs)e).CommandName;
        switch (strAccion)
        {
            case "Buscar":
                ucpagLista.NumeroPagina = 1;
                Listar();
                break;
            case "Nuevo":
                Nuevo();
                break;
            case "Exportar":
                Exportar();
                break;
            case "Imprimir":
                Imprimir();
                break;
        }
    }

    protected void ucpagLista_CambioPagina(object sender, EventArgs e)
    {
        Listar();
    }

    protected void lvLista_ItemCommand(object sender, ListViewCommandEventArgs e)
    {
        string strId = e.CommandArgument.ToString();
        HiddenField hfIdAplicacion = (HiddenField)e.Item.FindControl("hfIdAplicacion");
        string strIdAp = hfIdAplicacion.Value;
        switch (e.CommandName)
        {
            case "Editar":
                Editar(strId, strIdAp);
                break;
            case "Eliminar":
                Eliminar(strId, strIdAp);
                break;
        }
    }

    protected void lvLista_ItemDataBound(object sender, ListViewItemEventArgs e)
    {
        ImageButton ibt;
        if (e.Item.ItemType == ListViewItemType.DataItem)
        {
            ibt = (ImageButton)e.Item.FindControl("ibtEliminar");
            Label lb = (Label)e.Item.FindControl("lblEstado");
            if (((Label)e.Item.FindControl("lblEstado")).Text == Constantes.ESTADO_ACTIVO_DESC)
            {
                ibt.ImageUrl = Constantes.ESTADO_ACTIVO_URL;
                ibt.ToolTip = Resources.resDiccionario.Inactivar;
            }
            else
            {
                ibt.ImageUrl = Constantes.ESTADO_INACTIVO_URL;
                ibt.ToolTip = Resources.resDiccionario.Activar;
            }
        }
    }

    #endregion

    #region METODOS

    protected void Cargar()
    {
        //Master.Titulo.Text = "Nivel Alerta";
        ucpagLista.NumeroPagina = 1;
        ddlEstado.SelectedIndex = 0; //Estado Activo

        //Cargar Aplicacion
        Util.loadComboAndItem(ddlIdAplicacion, ListarAplicaciones(), "Descripcion", "IdAplicacion", "Suit", string.Format("--{0}--", Resources.resDiccionario.Todos), "0");
        //Carga Estado
        Util.loadCombo(ddlEstado, ListarParametroDetalle(1, 1, Constantes.PARAMETRO_ESTADOREGISTRO), "Descripcion", "ParametroDetalle");
        //Carga Tipo
        Util.loadCombo(ddlTipo, ListarParametroDetalle(1, 1, Constantes.PARAMETRO_TIPOREPORTE), "Descripcion", "ParametroDetalle");
        //Configura Parametros
        ConfiguraParametros();
    }

    /// <summary>
    /// Método Lista
    /// </summary>
    /// <returns></returns>
    protected void Listar()
    {
        int intTotalFilas = 0, intFilasXPagina = 0, inIdAplicacion = 0;
        string strDescripcion, strEstado, strTipo;
        int inNumeroPagina = NumeroPagina.Equals(0) ? ucpagLista.NumeroPagina : NumeroPagina;

        strTipo = ddlTipo.SelectedValue;
        strEstado = ddlEstado.SelectedValue;
        strDescripcion = txtDescripcion.Text.Trim();
        inIdAplicacion = int.Parse(ddlIdAplicacion.SelectedValue);
        //Validar

        //Filtrar
        DataTable dt = Listar(inIdAplicacion, strDescripcion, strTipo, ddlEstado.SelectedValue, inNumeroPagina);
        lvLista.DataSource = dt;
        lvLista.DataBind();
        if (dt.Rows.Count > 0)
        {
            intFilasXPagina = Convert.ToInt32(dt.Rows[0]["FilasXPagina"]);
            intTotalFilas = Convert.ToInt32(dt.Rows[0]["TotalFilas"]);
        }
        ucpagLista.TotalRegistros = intTotalFilas;
        ucpagLista.RegistrosPorPagina = intFilasXPagina;
        ucpagLista.EnlazarPaginador();
        ucpagLista.NumeroPagina = inNumeroPagina;
    }

    protected void Nuevo()
    {
        string strCadena = "?a=n";
        Util.Redireciona(EDITAR_RUTA, strCadena, true);
    }

    protected void Editar(string strIdGrupoReporte, string pstrIdAp)
    {
        string strCadena = string.Format("?a=e&i={0}&ap={1}&param1={2}", strIdGrupoReporte, pstrIdAp, ObtenerFiltroParametro());
        Util.Redireciona(EDITAR_RUTA, strCadena, true);
    }

    protected void Eliminar(string strIdGrupoReporte, string pstrIdAp)
    {
        string strCadena = string.Format("?a=d&i={0}&ap={1}&param1={2}", strIdGrupoReporte, pstrIdAp, ObtenerFiltroParametro());
        Util.Redireciona(EDITAR_RUTA, strCadena, true);
    }

    protected void Exportar()
    {
        UtilExcel ut = new UtilExcel();
        DataTable dt = Listar( int.Parse(ddlIdAplicacion.SelectedValue), txtDescripcion.Text.Trim(), ddlTipo.SelectedValue, ddlEstado.SelectedValue, 0);
        dt.Columns.Remove("FilasXPagina");
        dt.Columns.Remove("TotalFilas");
        ut.ExportaAExcelHoja(dt, Resources.resDiccionario.Archivo, Resources.resDiccionario.Datos);
    }

    protected void Imprimir()
    {
       
    }

    private string ObtenerFiltroParametro()
    {
        return string.Format("{0}|{1}|{2}|{3}|{4}", ucpagLista.NumeroPagina.ToString(),ddlIdAplicacion.SelectedValue, ddlTipo.SelectedValue, txtDescripcion.Text.Trim(), ddlEstado.SelectedValue);
    }

    void ConfiguraParametros()
    {
        string strParam = HttpUtility.UrlDecode(Request.QueryString["param1"]);
        if (!string.IsNullOrEmpty(strParam))
        {
            string[] strFiltros = strParam.Split('|');
            NumeroPagina = int.Parse(strFiltros[0]);
            Util.SelectCombo(ddlIdAplicacion, strFiltros[1]);
            Util.SelectCombo(ddlTipo, strFiltros[2]);
            txtDescripcion.Text = strFiltros[3];
            Util.SelectCombo(ddlEstado, strFiltros[4]);
        }
    }


    #endregion

    #region WEBSERVICES

    protected DataTable ListarAplicacion()
    {
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCAplicacion.IWCAplicacion>("BasicHttpBinding_IWCAplicacion"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar().Tables[0]);
            dt = response;
        }
        return dt;
    }

    /// <summary>
    /// Método Lista 
    /// </summary>
    /// <returns>Devuelve un DataSet</returns>
    protected DataTable Listar(int pintIdAplicacion, string pstrDescripcion, string psrtTipo, string pstrEstado, int pintPagina)
    {

        WCGrupoReporte.BEGrupoReporte be = new WCGrupoReporte.BEGrupoReporte();
        be.IdAplicacion = pintIdAplicacion;
        be.Descripcion = pstrDescripcion;
        be.Tipo = psrtTipo;
        be.Estado = pstrEstado;
        be.Pagina = pintPagina;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCGrupoReporte.IWCGrupoReporte>("BasicHttpBinding_IWCGrupoReporte"))
        {
            var response = client.ServiceOperation<DataTable>(
               c => c.Listar(be).Tables[0]
               );
            ;
            dt = response;
        }
        return dt;
    }


    /// <summary>
    /// Método Lista Companias
    /// </summary>
    /// <returns>Devuelve un dataTable</returns>
    protected DataTable ListarParametroDetalle(int pintidCompania, int pintIdAplicacion, string pstrParametro)
    {
        WCParametroDetalle.BEParametroDetalle be = new WCParametroDetalle.BEParametroDetalle();
        be.IdCompania = pintidCompania;
        be.IdAplicacion = pintIdAplicacion;
        be.Parametro = pstrParametro;
        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCParametroDetalle.IWCParametroDetalle>("BasicHttpBinding_IWCParametroDetalle"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar(be).Tables[0]);
            dt = response;
        }
        return dt;
    }

    protected DataTable ListarAplicaciones()
    {

        WCAplicacion.BEAplicacion be = new WCAplicacion.BEAplicacion();
        be.Estado = "A";

        DataTable dt = new DataTable();
        using (var client = new ServiceClient<WCAplicacion.IWCAplicacion>("BasicHttpBinding_IWCAplicacion"))
        {
            var response = client.ServiceOperation<DataTable>(c => c.Listar().Tables[0]);
            dt = response;
        }
        return dt;
    }
    #endregion


}